package com.css.upms.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.css.common.core.datascope.DataScope;
import com.css.common.core.utils.R;
import com.css.upms.api.dto.DeptTree;
import com.css.upms.api.entity.SysDept;
import com.css.upms.api.vo.MenuVo;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * 部门信息表
 *
 * @author hanyx
 * @date 2019-05-03 01:56:29
 */
public interface SysDeptService extends IService<SysDept> {

    /**
     * 部门信息表简单分页查询
     *
     * @param sysDept 部门信息表
     * @return
     */
    IPage<SysDept> getSysDeptPage(Page<SysDept> page, SysDept sysDept);

    /**
     * 查询部门树菜单
     *
     * @return 树
     */
    List<DeptTree> listDeptTrees();

    /**
     * 查询用户部门树
     *
     * @return
     */
    List<DeptTree> listCurrentUserDeptTrees();

    /**
     * 查询指定用户部门树
     *
     * @return
     */
    List<DeptTree> listDeptTreesByUserId(String userId);


    /**
     * 添加信息部门
     *
     * @param sysDept
     * @return
     */
    R saveDept(SysDept sysDept);

    /**
     * 删除部门
     *
     * @param id 部门 ID
     * @return 成功、失败
     */
    R removeDeptById(String id);

    /**
     * 更新部门
     *
     * @param sysDept 部门信息
     * @return 成功、失败
     */
    R updateDeptById(SysDept sysDept);

    /**
     * 有效部门数据
     *
     * @return
     */
    List<SysDept> selectAllValid();

    /**
     * 通过角色编号查询数据权限
     *
     * @param roleId 角色ID
     * @return 部门列表
     */
    List<SysDept> getDeptByRoleId(String roleId);

    /**
     * 通过用户编号查询数据权限
     *
     * @param userId 角色ID
     * @return 部门列表
     */
    List<SysDept> getDeptByUserId(String userId);

    /**
     * 获取指定部门id的下级部门集合
     *
     * @param deptId 指定部门id
     * @return 级部门集合
     */
    List<String> childDeptIds(String deptId);

    /**
     * 获取指定部门id的下级部门集合
     * 防止重复查询
     *
     * @param deptId 指定部门id
     * @return 级部门集合
     */
    List<String> childDeptIds(String deptId, List<SysDept> deptList);

    /**
     * 获取数据权限配置对象
     *
     * @param username
     * @return
     */
    DataScope getDataScope(String username);

    /**
     * 判断指定节点是不是当前登录用户的子节点
     *
     * @param deptId
     * @return
     */
    Boolean modifyCheck(String deptId);

    /**
     * 无分页的列表查询
     *
     * @param sysDept
     * @return
     */
    List<SysDept> getSysDeptList(SysDept sysDept);

    /**
     * 获取给予数据权限的部门树
     *
     * @return
     */
    List<DeptTree> listDataScopeTrees();


    /**
     * 查询用户部门树
     *
     * @return
     */
    List<DeptTree> listCurrentUserDeptTrees(Boolean parentFlag);
}
